AWS CLI で Route53 のホストゾーンのレコードを操作してみた
コンサル部のYui(@MayForBlue)です。
今回は、AWS CLI を使って Route53 のホストゾーンのレコード内容を変更する機会があったので、手順をご紹介します。
やってみる
前提
今回の環境では AWS CLI v2 を使用しています。
$ aws --version aws-cli/2.0.0 Python/3.7.4 Darwin/19.4.0 botocore/2.0.0dev4
準備
今回は検証用として、test01.example.com
という名前のプライベートホストゾーンを用意しました。
レコード変更用のファイルを用意する
今回は change-resource-record-sets のコマンドを使用します。
このコマンドを実行するために、レコード変更の内容を記述したjsonファイルを用意し、任意のフォルダに保存します。
(今回は~/sample.json
としました。)
ファイルに以下を記述します。
- Comment: 任意のコメント
- Changes: 変更内容
- Action: 変更の種類(CREATE/DELETE/UPSERT のいずれか)
- ResourceRecordSet: 変更対象レコードの情報
- Name: レコード名
- Type: レコードタイプ
- TTL: レコードに関する情報をキャッシュする時間
- ResourceRecords: 値/トラフィックのルーティング先
{ "Comment": "CREATE/DELETE/UPSERT a record ", "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "a.example.com", "Type": "A", "TTL": 300, "ResourceRecords": [{ "Value": "4.4.4.4"}] }}] }
確認
検証前にレコード一覧を確認しておきます。
この時点ではデフォルトで用意されているNSレコード、SOAレコードのみが存在します。
検証前のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx { "ResourceRecordSets": [ { "Name": "test01.example.com.", "Type": "NS", "TTL": 172800, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk." }, { "Value": "ns-0.awsdns-00.com." }, { "Value": "ns-1024.awsdns-00.org." }, { "Value": "ns-512.awsdns-00.net." } ] }, { "Name": "test01.example.com.", "Type": "SOA", "TTL": 900, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ] } ] }
レコード作成
まずはレコード作成からやってみます。
sample.json の内容を以下のようにします。
{ "Comment": "CREATE a record ", "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "hoge.test01.example.com", "Type": "A", "TTL": 300, "ResourceRecords": [{ "Value": "4.4.4.4"}] }}] }
コマンドを実行します。
$ aws route53 change-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx --change-batch file://sample.json { "ChangeInfo": { "Id": "/change/C00067102AWDNYCR9D6J", "Status": "PENDING", "SubmittedAt": "2020-09-14T03:03:29.308000+00:00", "Comment": "CREATE a record " } }
コマンドが成功すると、レコード変更の一意のIDが生成されます。
以下のコマンドでそのIDを指定すると、変更のステータスを確認することができます。
ステータスがPENDING
からINSYNC
に変われば変更完了です。
$ aws route53 get-change --id /change/C00067102AWDNYCR9D6J { "ChangeInfo": { "Id": "/change/C00067102AWDNYCR9D6J", "Status": "INSYNC", "SubmittedAt": "2020-09-14T03:03:29.308000+00:00", "Comment": "CREATE a record " } }
コマンド実行後のホストゾーンのレコード一覧を取得して、レコードが作成できていることを確認します。
作成後のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx { "ResourceRecordSets": [ { "Name": "test01.example.com.", "Type": "NS", "TTL": 172800, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk." }, { "Value": "ns-0.awsdns-00.com." }, { "Value": "ns-1024.awsdns-00.org." }, { "Value": "ns-512.awsdns-00.net." } ] }, { "Name": "test01.example.com.", "Type": "SOA", "TTL": 900, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ] }, { "Name": "hoge.test01.example.com.", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "4.4.4.4" } ] } ] }
レコード更新
sample.json を以下のように変更して、レコードの更新をやってみます。
{ "Comment": "UPSERT a record ", "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "hoge.test01.example.com", "Type": "A", "TTL": 300, "ResourceRecords": [{ "Value": "5.5.5.5"}] }}] }
コマンドを実行します。
$ aws route53 change-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx --change-batch file://sample.json { "ChangeInfo": { "Id": "/change/C00764253VZ1CVLWFXDVM", "Status": "PENDING", "SubmittedAt": "2020-09-14T04:11:41.041000+00:00", "Comment": "UPSERT a record " } }
コマンド実行後のホストゾーンのレコード一覧を取得して、レコードが更新できていることを確認します。
更新後のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx { "ResourceRecordSets": [ { "Name": "test01.example.com.", "Type": "NS", "TTL": 172800, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk." }, { "Value": "ns-0.awsdns-00.com." }, { "Value": "ns-1024.awsdns-00.org." }, { "Value": "ns-512.awsdns-00.net." } ] }, { "Name": "test01.example.com.", "Type": "SOA", "TTL": 900, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ] }, { "Name": "hoge.test01.example.com.", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "5.5.5.5" } ] } ] }
レコード削除
最後に、レコード削除をやってみます。
sample.json を以下のように変更します。
{ "Comment": "DELETE a record ", "Changes": [{ "Action": "DELETE", "ResourceRecordSet": { "Name": "hoge.test01.example.com", "Type": "A", "TTL": 300, "ResourceRecords": [{ "Value": "5.5.5.5"}] }}] }
コマンドを実行します。
$ aws route53 change-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx --change-batch file://sample.json { "ChangeInfo": { "Id": "/change/C083149111SUUTMJ18CJF", "Status": "PENDING", "SubmittedAt": "2020-09-14T04:18:32.952000+00:00", "Comment": "DELETE a record " } }
コマンド実行後のホストゾーンのレコード一覧を取得して、レコードが削除できていることを確認します。
更新後のレコード一覧
$ aws route53 list-resource-record-sets --hosted-zone-id Zxxxxxxxxxxxxxxxx { "ResourceRecordSets": [ { "Name": "test01.example.com.", "Type": "NS", "TTL": 172800, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk." }, { "Value": "ns-0.awsdns-00.com." }, { "Value": "ns-1024.awsdns-00.org." }, { "Value": "ns-512.awsdns-00.net." } ] }, { "Name": "test01.example.com.", "Type": "SOA", "TTL": 900, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ] } ] }
さいごに
AWS CLI を使って Route53 のホストゾーンのレコード内容を変更する方法をご紹介しました。
こういった変更はマネジメントコンソールを使用することが多いと思うのですが、CLIを使って変更する機会があったので、手順を残してみました。
同じようにCLIを使って変更を行いたい方の参考になれば幸いです。
以上、コンサル部のYui(@MayForBlue)でした。
参考リンク
AWS CLI を使用して Amazon Route 53 でシンプルなリソースレコードセットを作成する方法を教えてください。
AWS CLI Command Reference Route53